package kvstore

import (
	"kvstore/utils"
)

const storeDirName = "tmp"

type Options struct {
	DirPath string // 数据库数据目录

	// 数据文件大小
	DataFileSize int64

	// 每次写数据是否持久化
	SyncWrites bool

	// 累计写到多少字节后进行持久化
	BytesPerSync uint

	// 索引类型
	IndexType IndexerType

	// 启动时是否使用 MMap 加载数据
	MMapAtStartup bool

	// 数据文件何必的阈值
	DataFileMergeRatio float32
}

type IteratorOptions struct {
	// 遍历前缀为指定值的 Key，默认为空
	Prefix []byte
	// 是否反向遍历，默认 false 是正向
	Reverse bool
}

// WriteBatchOptions 批量写配置项
type WriteBatchOptions struct {
	// 一个批次当中最大的数据量
	MaxBatchNum uint
	// 提交时是否 sync 持久化
	SyncWrite bool
}

type IndexerType = int8

const (
	// Btree 索引
	Btree IndexerType = iota + 1

	// ART Adpative Radix Tree 自适应基数索引
	ART

	// BPlusTree B+树索引，将索引存储到磁盘上
	BPlusTree
)

var DefaultOptions = Options{
	//DirPath:      os.TempDir(),
	DirPath:            utils.ProjectRootPath + storeDirName,
	DataFileSize:       256 * 1024 * 1024, // 256M
	SyncWrites:         false,
	BytesPerSync:       0,
	IndexType:          Btree,
	MMapAtStartup:      true,
	DataFileMergeRatio: 0.5,
}

var DefaultIteratorOptions = IteratorOptions{
	Prefix:  nil,
	Reverse: false,
}

var DefaultWriteBatchOptions = WriteBatchOptions{
	MaxBatchNum: 1000,
	SyncWrite:   true,
}
